home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-10-31 | 2.6 KB | 95 lines | [TEXT/MACA] |
- 'example of MacPoint "HexPix" protocol for transmitting
- 'bitmapped graphics in BBS messages by converting
- 'hexadecimal character strings to bitmaps
-
- 'written for the Microsoft Macintosh BASIC compiler
-
- 'bug: the last line of bits sometimes gets drawn twice
-
- DIM STATIC H$(99), ARC$(40)
- DEFINT W-Z
- wcorner=450: wcenter=INT(wcorner/2)
- ARN=1
-
- WINDOW 1, "HexPixReader", (25,35)-(250,250),1
- CLS: PRINT "open the bitmap file"
- FIN$=FILES$(1, "TEXT")
- OPEN FIN$ FOR INPUT AS #1
- WHILE NOT EOF(1)
- IF ARN<40 THEN LINE INPUT #1, ARC$(ARN): ARN=ARN+1
- WEND
-
- BMHeader:
- NOC$="": XLIMIT$="": YLIMIT$=""
- EIBM=0 'Errors In BitMap
- LED=INSTR(ARC$(1), ":"): RED=INSTR(ARC$(1), "_^")
- IF RED<=LED THEN PRINT "Error 1 in bitmap": BEEP: EIBM=1
- FOR L=LED+1 TO RED
- NOC$=NOC$+MID$(ARC$(1),L,1)
- IF MID$(ARC$(1),L,1)="," THEN COMMALOC=L: L=RED+1
- NEXT
- NUMCOLORS=VAL(NOC$)
- IF NUMCOLORS<>2 THEN PRINT "Error 2 in bitmap": BEEP: EIBM=EIBM+2
-
- FOR L=COMMALOC+1 TO RED
- XLIMIT$=XLIMIT$+MID$(ARC$(1),L,1)
- IF MID$(ARC$(1),L,1)="," THEN COMMALOC=L: L=RED+1
- NEXT
- XLIMIT=VAL(XLIMIT$)
- IF XLIMIT/4<>INT(XLIMIT/4) THEN PRINT "Error 3 in bitmap": BEEP: EIBM=EIBM+4
- IF XLIMIT<4 OR XLIMIT>300 THEN PRINT "Error 4 in bitmap": BEEP: EIBM=EIBM+8
- PRINT XLIMIT "pixels wide"
-
- FOR L=COMMALOC+1 TO RED
- YLIMIT$=YLIMIT$+MID$(ARC$(1),L,1)
- IF MID$(ARC$(1),L,1)="," THEN COMMALOC=L: L=RED+1
- NEXT
- YLIMIT=VAL(YLIMIT$)
- IF YLIMIT<4 OR YLIMIT>200 THEN PRINT "Error 5 in bitmap": BEEP: EIBM=EIBM+16
- PRINT YLIMIT "pixels high"
-
- HSC=1: ARN=2: FIRSTARN=2
- EXPECTEDLENGTH=XLIMIT/4
- NP=XLIMIT*YLIMIT: LW=INT(NP/500)
- PRINT "wait" LW "seconds..."
- PRINT: PRINT "enter a command-period to abort"
-
- 'scan each line of message and extract hex strings, ignoring
- ' spaces and non-hex characters
-
- PullMyStrings:
- FOR Z=1 TO LEN(ARC$(ARN))
- X$=MID$(ARC$(ARN),Z,1): AX=ASC(X$+CHR$(0))
- IF AX>47 AND AX<58 THEN H$(HSC)=H$(HSC)+X$
- IF AX>64 AND AX<71 THEN H$(HSC)=H$(HSC)+X$
- IF LEN(H$(HSC))=EXPECTEDLENGTH THEN HSC=HSC+1
- NEXT Z
- IF INSTR(ARC$(ARN), "^_bitmap,end_^")=0 AND HSC<=YLIMIT THEN ARN=ARN+1: GOTO PullMyStrings
-
- 'dimensions for the window in which the graphic appears
-
- Y1=25 'upper
- Y2=Y1+YLIMIT+3 'lower
- X1=wcorner-XLIMIT-7 'left
- X2=wcorner-1
-
- WINDOW CLOSE 2
-
- WINDOW 2,"",(X1,Y1)-(X2,Y2),3: CLS
-
- 'draw the picture
-
- FOR Y=1 TO HSC: X=2
- FOR K=1 TO EXPECTEDLENGTH
- HEXCHAR$=MID$(H$(Y), K, 1)
- AHC=ASC(HEXCHAR$)
- IF AHC>47 AND AHC<58 THEN NYBBLE=AHC-48
- IF AHC>64 AND AHC<71 THEN NYBBLE=AHC-55
- X=X+1: IF NYBBLE AND 8 THEN PSET(X,Y), 33
- X=X+1: IF NYBBLE AND 4 THEN PSET(X,Y), 33
- X=X+1: IF NYBBLE AND 2 THEN PSET(X,Y), 33
- X=X+1: IF NYBBLE AND 1 THEN PSET(X,Y), 33
- NEXT K
- NEXT Y
-
- Loop: GOTO Loop